Skip to content

Fix #780: Cast enum values to underlying type in Select Case range comparisons#1257

Open
GrahamTheCoder wants to merge 4 commits intoicsharpcode:masterfrom
GrahamTheCoder:claude/fix-issue-780-select-case-range-cast
Open

Fix #780: Cast enum values to underlying type in Select Case range comparisons#1257
GrahamTheCoder wants to merge 4 commits intoicsharpcode:masterfrom
GrahamTheCoder:claude/fix-issue-780-select-case-range-cast

Conversation

@GrahamTheCoder
Copy link
Copy Markdown
Member

Fixes #780

When a VB Select Case uses Case enumVal1 To enumVal2, the converter generates C# <= comparisons. C# does not support <= directly on enum values, causing a compilation error. This fix detects when the switch expression is an enum type and casts both operands to the enum's underlying integral type before comparison, producing e.g. (int)EnumType.Value <= (int)@case.

https://claude.ai/code/session_01AkwUvu3XuCdj3D4axoX4UX

Link to issue(s) this covers

Problem

Link to, or brief information about the issue

Solution

  • Any comments on the approach taken, its consistency with surrounding code, etc.
  • Which part of this PR is most in need of attention/improvement?
  • At least one test covering the code changed

claude added 4 commits April 16, 2026 16:40
…se range comparisons

When a VB Select Case uses `Case enumVal1 To enumVal2`, the converter generates
C# `<=` comparisons. C# does not support `<=` directly on enum values, causing
a compilation error. This fix detects when the switch expression is an enum type
and casts both operands to the enum's underlying integral type before comparison,
producing e.g. `(int)EnumType.Value <= (int)@case`.

https://claude.ai/code/session_01AkwUvu3XuCdj3D4axoX4UX
… error

The test uses a 'var @case when' pattern which all other similar tests
correctly expect to produce a CS0825 compilation error in the target.
Without this, the test output won't match and CI will fail.

https://claude.ai/code/session_01AkwUvu3XuCdj3D4axoX4UX
…n Vsix not built

The Vsix project uses UseWPF=true with net472, which fails SDK validation
when MSBuild tries to build it as a dependency of Tests.csproj on newer
.NET SDK versions. Setting Build="false" prevents this. Also makes the
VsixDoesNotReferenceNewerBclPolyfillsThanOldestSupportedVs test skip
gracefully when the Vsix output directory is absent (matching the second test).

https://claude.ai/code/session_01AkwUvu3XuCdj3D4axoX4UX
…indows

The net472+UseWPF Vsix project cannot be evaluated by the .NET 10 SDK
without triggering 'target platform must be set to Windows'. Referencing
it from Tests.csproj (even with Build=false) causes dotnet build to fail.

Remove the reference - the Vsix tests already skip gracefully when the
output directory is absent (VsixDoesNotReferenceNewerBclPolyfillsThanOldestSupportedVs
now returns early like the second test). Build Vsix separately with msbuild.

https://claude.ai/code/session_01AkwUvu3XuCdj3D4axoX4UX
@GrahamTheCoder GrahamTheCoder force-pushed the claude/fix-issue-780-select-case-range-cast branch from ab1b5c3 to b88e0c8 Compare April 16, 2026 16:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

VB -> C#: Select Case involving a range needs cast

2 participants